package de.digisalt.dsnesds.editors.projectmeta.operations;

import java.util.Iterator;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.IUndoContext;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;

public class ChangeGameVersionOperation extends AbstractUndoableOperation
{

	@Override
	public IStatus execute(IProgressMonitor monitor, IAdaptable info)
			throws ExecutionException
	{
		model.setVersion((Integer) newValue);
		return Status.OK_STATUS;
	}

	@Override
	public IUndoContext[] getContexts()
	{
		int s = undoContexts.size();
		IUndoContext[] contexts = new IUndoContext[s];
		Iterator<IUndoContext> iterator = undoContexts.iterator();
		for (int i = 0; i < s; i++)
		{
			contexts[i] = iterator.next();
		}
		return contexts;
	}

	@Override
	public String getLabel()
	{
		return msg;
	}

	@Override
	public boolean hasContext(IUndoContext context)
	{
		if (undoContexts.size() > 0)
		{
			return true;
		}
		return false;
	}

	@Override
	public IStatus redo(IProgressMonitor monitor, IAdaptable info)
			throws ExecutionException
	{
		model.setVersion(newValue);
		return Status.OK_STATUS;
	}

	@Override
	public void removeContext(IUndoContext context)
	{
		// TODO Auto-generated method stub

	}

	@Override
	public IStatus undo(IProgressMonitor monitor, IAdaptable info)
			throws ExecutionException
	{
		model.setVersion(previousVersion);
		return Status.OK_STATUS;
	}

}
